--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
tests/backend/test_ping_api.py HEAD (2bf00cb3) Text, 9.18 KB
T8b949e# SPDX-License-Identifier: 0BSD
T8b949e"""Regression tests for the LXMF delivery ping HTTP endpoint."""
Tff7b72import T7ee787json
Tff7b72from T7ee787unittestT7ee787.T7ee787mock Tff7b72import Te6edf3MagicMockTb4b4b4, Te6edf3patch
Tff7b72import T7ee787pytest
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787httpT7ee787.T7ee787routesT7ee787.T7ee787path_probe Tff7b72import Te6edf3PATH_WAIT_REQUIRES_POST_MESSAGE
Tff7b72def Td2a8ff_find_handlerTb4b4b4(Te6edf3appTb4b4b4, Te6edf3pathTb4b4b4, Te6edf3methodTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3route Tff7b72in Te6edf3appTff7b72.Td2a8ffget_routesTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3routeTff7b72.Td2a8ffpath Tff7b72== Te6edf3path Tff7b72and Te6edf3routeTff7b72.Td2a8ffmethod Tff7b72== Te6edf3methodTb4b4b4:
Tff7b72return Te6edf3routeTff7b72.Td2a8ffhandler
Tff7b72return Tff7b72None
Tff7b72def Td2a8ff_make_requestTb4b4b4(Te6edf3match_infoTff7b72=Tff7b72NoneTb4b4b4, Te6edf3queryTff7b72=Tff7b72NoneTb4b4b4, Te6edf3methodTff7b72=Ta5d6ff"Ta5d6ffPOSTTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3request Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3requestTff7b72.Td2a8ffmatch_info Tff7b72= Te6edf3match_info Tff7b72or Tb4b4b4{Tb4b4b4}
Te6edf3requestTff7b72.Td2a8ffquery Tff7b72= Te6edf3query Tff7b72or Tb4b4b4{Tb4b4b4}
Te6edf3requestTff7b72.Td2a8ffmethod Tff7b72= Te6edf3method
Tff7b72return Te6edf3request
Tff7b72def Td2a8ff_two_running_contextsTb4b4b4(Te6edf3mock_appTb4b4b4)Tb4b4b4:
Te6edf3current Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3currentTff7b72.Td2a8ffrunning Tff7b72= Tff7b72True
Te6edf3currentTff7b72.Td2a8ffconfigTff7b72.Td2a8ffauto_resend_failed_messages_when_announce_receivedTff7b72.Td2a8ffgetTff7b72.Td2a8ffreturn_value Tff7b72= Tff7b72True
Te6edf3other Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3otherTff7b72.Td2a8ffrunning Tff7b72= Tff7b72True
Te6edf3otherTff7b72.Td2a8ffconfigTff7b72.Td2a8ffauto_resend_failed_messages_when_announce_receivedTff7b72.Td2a8ffgetTff7b72.Td2a8ffreturn_value Tff7b72= Tb4b4b4(
Tff7b72True
Tb4b4b4)
Te6edf3mock_appTff7b72.Td2a8ffcurrent_context Tff7b72= Te6edf3current
Te6edf3mock_appTff7b72.Td2a8ffcontexts Tff7b72= Tb4b4b4{Ta5d6ff"Ta5d6ffcurrentTa5d6ff"Tb4b4b4: Te6edf3currentTb4b4b4, Ta5d6ff"Ta5d6ffotherTa5d6ff"Tb4b4b4: Te6edf3otherTb4b4b4}
Te6edf3mock_appTff7b72.Td2a8ffresend_failed_messages_for_destination Tff7b72= Te6edf3MagicMockTb4b4b4(
Te6edf3return_valueTff7b72=Te6edf3MagicMockTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72return Te6edf3currentTb4b4b4, Te6edf3other
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tff7b72async Tff7b72def Td2a8fftest_ping_is_post_not_getTb4b4b4(Te6edf3mock_appTb4b4b4)Tb4b4b4:
Te6edf3path Tff7b72= Ta5d6ff"Ta5d6ff/api/v1/ping/Tffd700{destination_hash}Ta5d6ff/lxmf.deliveryTa5d6ff"
Tff7b72assert Te6edf3_find_handlerTb4b4b4(Te6edf3mock_appTb4b4b4, Te6edf3pathTb4b4b4, Ta5d6ff"Ta5d6ffPOSTTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72not Tff7b72None
Tff7b72assert Te6edf3_find_handlerTb4b4b4(Te6edf3mock_appTb4b4b4, Te6edf3pathTb4b4b4, Ta5d6ff"Ta5d6ffGETTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72None
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tff7b72async Tff7b72def Td2a8fftest_ping_rejects_invalid_destination_hashTb4b4b4(Te6edf3mock_appTb4b4b4)Tb4b4b4:
Te6edf3handler Tff7b72= Te6edf3_find_handlerTb4b4b4(
Te6edf3mock_appTb4b4b4,
Ta5d6ff"Ta5d6ff/api/v1/ping/Tffd700{destination_hash}Ta5d6ff/lxmf.deliveryTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffPOSTTa5d6ff"Tb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3handler Tff7b72is Tff7b72not Tff7b72None
Te6edf3response Tff7b72= Tff7b72await Te6edf3handlerTb4b4b4(
Te6edf3_make_requestTb4b4b4(
Te6edf3match_infoTff7b72=Tb4b4b4{Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffnot-hexTa5d6ff"Tb4b4b4}Tb4b4b4,
Te6edf3queryTff7b72=Tb4b4b4{Ta5d6ff"Ta5d6fftimeoutTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff5Ta5d6ff"Tb4b4b4}Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3responseTff7b72.Td2a8ffstatus Tff7b72== T79c0ff400
Te6edf3data Tff7b72= Te6edf3jsonTff7b72.Td2a8ffloadsTb4b4b4(Te6edf3responseTff7b72.Td2a8ffbodyTb4b4b4)
Tff7b72assert Ta5d6ff"Ta5d6ffInvalid destination hashTa5d6ff" Tff7b72in Te6edf3dataTb4b4b4[Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4]
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tff7b72async Tff7b72def Td2a8fftest_ping_rejects_non_integer_timeoutTb4b4b4(Te6edf3mock_appTb4b4b4)Tb4b4b4:
Te6edf3handler Tff7b72= Te6edf3_find_handlerTb4b4b4(
Te6edf3mock_appTb4b4b4,
Ta5d6ff"Ta5d6ff/api/v1/ping/Tffd700{destination_hash}Ta5d6ff/lxmf.deliveryTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffPOSTTa5d6ff"Tb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3handler Tff7b72is Tff7b72not Tff7b72None
Te6edf3response Tff7b72= Tff7b72await Te6edf3handlerTb4b4b4(
Te6edf3_make_requestTb4b4b4(
Te6edf3match_infoTff7b72=Tb4b4b4{Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffabTa5d6ff" Tff7b72* T79c0ff16Tb4b4b4}Tb4b4b4,
Te6edf3queryTff7b72=Tb4b4b4{Ta5d6ff"Ta5d6fftimeoutTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffabcTa5d6ff"Tb4b4b4}Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3responseTff7b72.Td2a8ffstatus Tff7b72== T79c0ff400
Te6edf3data Tff7b72= Te6edf3jsonTff7b72.Td2a8ffloadsTb4b4b4(Te6edf3responseTff7b72.Td2a8ffbodyTb4b4b4)
Tff7b72assert Ta5d6ff"Ta5d6ffTimeoutTa5d6ff" Tff7b72in Te6edf3dataTb4b4b4[Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4]
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tff7b72async Tff7b72def Td2a8fftest_ping_rejects_zero_timeoutTb4b4b4(Te6edf3mock_appTb4b4b4)Tb4b4b4:
Te6edf3handler Tff7b72= Te6edf3_find_handlerTb4b4b4(
Te6edf3mock_appTb4b4b4,
Ta5d6ff"Ta5d6ff/api/v1/ping/Tffd700{destination_hash}Ta5d6ff/lxmf.deliveryTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffPOSTTa5d6ff"Tb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3handler Tff7b72is Tff7b72not Tff7b72None
Te6edf3response Tff7b72= Tff7b72await Te6edf3handlerTb4b4b4(
Te6edf3_make_requestTb4b4b4(
Te6edf3match_infoTff7b72=Tb4b4b4{Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffabTa5d6ff" Tff7b72* T79c0ff16Tb4b4b4}Tb4b4b4,
Te6edf3queryTff7b72=Tb4b4b4{Ta5d6ff"Ta5d6fftimeoutTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff0Ta5d6ff"Tb4b4b4}Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3responseTff7b72.Td2a8ffstatus Tff7b72== T79c0ff400
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tff7b72async Tff7b72def Td2a8fftest_ping_rejects_timeout_above_600Tb4b4b4(Te6edf3mock_appTb4b4b4)Tb4b4b4:
Te6edf3handler Tff7b72= Te6edf3_find_handlerTb4b4b4(
Te6edf3mock_appTb4b4b4,
Ta5d6ff"Ta5d6ff/api/v1/ping/Tffd700{destination_hash}Ta5d6ff/lxmf.deliveryTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffPOSTTa5d6ff"Tb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3handler Tff7b72is Tff7b72not Tff7b72None
Te6edf3response Tff7b72= Tff7b72await Te6edf3handlerTb4b4b4(
Te6edf3_make_requestTb4b4b4(
Te6edf3match_infoTff7b72=Tb4b4b4{Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffabTa5d6ff" Tff7b72* T79c0ff16Tb4b4b4}Tb4b4b4,
Te6edf3queryTff7b72=Tb4b4b4{Ta5d6ff"Ta5d6fftimeoutTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff601Ta5d6ff"Tb4b4b4}Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3responseTff7b72.Td2a8ffstatus Tff7b72== T79c0ff400
Te6edf3data Tff7b72= Te6edf3jsonTff7b72.Td2a8ffloadsTb4b4b4(Te6edf3responseTff7b72.Td2a8ffbodyTb4b4b4)
Tff7b72assert Ta5d6ff"Ta5d6ff600Ta5d6ff" Tff7b72in Te6edf3dataTb4b4b4[Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4]
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tff7b72async Tff7b72def Td2a8fftest_get_path_request_true_is_400_and_does_not_prepareTb4b4b4(Te6edf3mock_appTb4b4b4)Tb4b4b4:
Te6edf3handler Tff7b72= Te6edf3_find_handlerTb4b4b4(
Te6edf3mock_appTb4b4b4,
Ta5d6ff"Ta5d6ff/api/v1/destination/Tffd700{destination_hash}Ta5d6ff/pathTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffGETTa5d6ff"Tb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3handler Tff7b72is Tff7b72not Tff7b72None
Te6edf3dest Tff7b72= Ta5d6ff"Ta5d6ffaTa5d6ff" Tff7b72* T79c0ff32
Te6edf3req Tff7b72= Te6edf3_make_requestTb4b4b4(
Te6edf3match_infoTff7b72=Tb4b4b4{Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Te6edf3destTb4b4b4}Tb4b4b4,
Te6edf3queryTff7b72=Tb4b4b4{Ta5d6ff"Ta5d6ffrequestTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6fftrueTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fftimeoutTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff1Ta5d6ff"Tb4b4b4}Tb4b4b4,
Te6edf3methodTff7b72=Ta5d6ff"Ta5d6ffGETTa5d6ff"Tb4b4b4,
Tb4b4b4)
Tff7b72with Te6edf3patchTb4b4b4(
Ta5d6ff"Ta5d6ffmeshchatx.meshchat.reticulum_pathfinding.prepare_fresh_path_requestTa5d6ff"Tb4b4b4,
Tb4b4b4) Tff7b72as Te6edf3pfpTb4b4b4:
Te6edf3response Tff7b72= Tff7b72await Te6edf3handlerTb4b4b4(Te6edf3reqTb4b4b4)
Tff7b72assert Te6edf3responseTff7b72.Td2a8ffstatus Tff7b72== T79c0ff400
Te6edf3data Tff7b72= Te6edf3jsonTff7b72.Td2a8ffloadsTb4b4b4(Te6edf3responseTff7b72.Td2a8ffbodyTb4b4b4)
Tff7b72assert Te6edf3dataTb4b4b4[Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3PATH_WAIT_REQUIRES_POST_MESSAGE
Te6edf3pfpTff7b72.Td2a8ffassert_not_calledTb4b4b4(Tb4b4b4)
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tff7b72async Tff7b72def Td2a8fftest_post_path_rejects_timeout_above_600Tb4b4b4(Te6edf3mock_appTb4b4b4)Tb4b4b4:
Te6edf3handler Tff7b72= Te6edf3_find_handlerTb4b4b4(
Te6edf3mock_appTb4b4b4,
Ta5d6ff"Ta5d6ff/api/v1/destination/Tffd700{destination_hash}Ta5d6ff/pathTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffPOSTTa5d6ff"Tb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3handler Tff7b72is Tff7b72not Tff7b72None
Te6edf3response Tff7b72= Tff7b72await Te6edf3handlerTb4b4b4(
Te6edf3_make_requestTb4b4b4(
Te6edf3match_infoTff7b72=Tb4b4b4{Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffabTa5d6ff" Tff7b72* T79c0ff16Tb4b4b4}Tb4b4b4,
Te6edf3queryTff7b72=Tb4b4b4{Ta5d6ff"Ta5d6fftimeoutTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff601Ta5d6ff"Tb4b4b4}Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3responseTff7b72.Td2a8ffstatus Tff7b72== T79c0ff400
Te6edf3data Tff7b72= Te6edf3jsonTff7b72.Td2a8ffloadsTb4b4b4(Te6edf3responseTff7b72.Td2a8ffbodyTb4b4b4)
Tff7b72assert Ta5d6ff"Ta5d6ff600Ta5d6ff" Tff7b72in Te6edf3dataTb4b4b4[Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4]
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tff7b72async Tff7b72def Td2a8fftest_post_path_rejects_non_integer_timeoutTb4b4b4(Te6edf3mock_appTb4b4b4)Tb4b4b4:
Te6edf3handler Tff7b72= Te6edf3_find_handlerTb4b4b4(
Te6edf3mock_appTb4b4b4,
Ta5d6ff"Ta5d6ff/api/v1/destination/Tffd700{destination_hash}Ta5d6ff/pathTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffPOSTTa5d6ff"Tb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3handler Tff7b72is Tff7b72not Tff7b72None
Te6edf3response Tff7b72= Tff7b72await Te6edf3handlerTb4b4b4(
Te6edf3_make_requestTb4b4b4(
Te6edf3match_infoTff7b72=Tb4b4b4{Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffabTa5d6ff" Tff7b72* T79c0ff16Tb4b4b4}Tb4b4b4,
Te6edf3queryTff7b72=Tb4b4b4{Ta5d6ff"Ta5d6fftimeoutTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffnopeTa5d6ff"Tb4b4b4}Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3responseTff7b72.Td2a8ffstatus Tff7b72== T79c0ff400
Te6edf3data Tff7b72= Te6edf3jsonTff7b72.Td2a8ffloadsTb4b4b4(Te6edf3responseTff7b72.Td2a8ffbodyTb4b4b4)
Tff7b72assert Ta5d6ff"Ta5d6ffintegerTa5d6ff" Tff7b72in Te6edf3dataTb4b4b4[Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4]Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tff7b72async Tff7b72def Td2a8fftest_request_path_resend_uses_current_context_onlyTb4b4b4(Te6edf3mock_appTb4b4b4)Tb4b4b4:
Te6edf3currentTb4b4b4, Te6edf3other Tff7b72= Te6edf3_two_running_contextsTb4b4b4(Te6edf3mock_appTb4b4b4)
Te6edf3handler Tff7b72= Te6edf3_find_handlerTb4b4b4(
Te6edf3mock_appTb4b4b4,
Ta5d6ff"Ta5d6ff/api/v1/destination/Tffd700{destination_hash}Ta5d6ff/request-pathTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffPOSTTa5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3dest Tff7b72= Ta5d6ff"Ta5d6ffbTa5d6ff" Tff7b72* T79c0ff32
Te6edf3req Tff7b72= Te6edf3_make_requestTb4b4b4(Te6edf3match_infoTff7b72=Tb4b4b4{Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Te6edf3destTb4b4b4}Tb4b4b4)
Tff7b72with Tb4b4b4(
Te6edf3patchTb4b4b4(Ta5d6ff"Ta5d6ffmeshchatx.meshchat.reticulum_pathfinding.prepare_fresh_path_requestTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3patchTb4b4b4(Ta5d6ff"Ta5d6ffmeshchatx.meshchat.RNS.Transport.has_pathTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4,
Te6edf3patchTb4b4b4(Ta5d6ff"Ta5d6ffmeshchatx.meshchat.AsyncUtils.run_asyncTa5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4:
Te6edf3response Tff7b72= Tff7b72await Te6edf3handlerTb4b4b4(Te6edf3reqTb4b4b4)
Tff7b72assert Te6edf3responseTff7b72.Td2a8ffstatus Tff7b72== T79c0ff200
Te6edf3mock_appTff7b72.Td2a8ffresend_failed_messages_for_destinationTff7b72.Td2a8ffassert_called_onceTb4b4b4(Tb4b4b4)
Te6edf3kwargs Tff7b72= Te6edf3mock_appTff7b72.Td2a8ffresend_failed_messages_for_destinationTff7b72.Td2a8ffcall_argsTff7b72.Td2a8ffkwargs
Tff7b72assert Te6edf3kwargsTb4b4b4[Ta5d6ff"Ta5d6ffcontextTa5d6ff"Tb4b4b4] Tff7b72is Te6edf3current
Tff7b72assert Te6edf3kwargsTb4b4b4[Ta5d6ff"Ta5d6ffcontextTa5d6ff"Tb4b4b4] Tff7b72is Tff7b72not Te6edf3other
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tff7b72async Tff7b72def Td2a8fftest_post_path_resend_uses_current_context_onlyTb4b4b4(Te6edf3mock_appTb4b4b4)Tb4b4b4:
Te6edf3currentTb4b4b4, Te6edf3other Tff7b72= Te6edf3_two_running_contextsTb4b4b4(Te6edf3mock_appTb4b4b4)
Te6edf3mock_appTff7b72.Td2a8ffreticulum Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3mock_appTff7b72.Td2a8ffreticulumTff7b72.Td2a8ffget_next_hopTff7b72.Td2a8ffreturn_value Tff7b72= Tffa657bytesTb4b4b4(T79c0ff16Tb4b4b4)
Te6edf3mock_appTff7b72.Td2a8ffreticulumTff7b72.Td2a8ffget_next_hop_if_nameTff7b72.Td2a8ffreturn_value Tff7b72= Ta5d6ff"Ta5d6ffif0Ta5d6ff"
Te6edf3handler Tff7b72= Te6edf3_find_handlerTb4b4b4(
Te6edf3mock_appTb4b4b4,
Ta5d6ff"Ta5d6ff/api/v1/destination/Tffd700{destination_hash}Ta5d6ff/pathTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffPOSTTa5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3dest Tff7b72= Ta5d6ff"Ta5d6ffcTa5d6ff" Tff7b72* T79c0ff32
Te6edf3req Tff7b72= Te6edf3_make_requestTb4b4b4(
Te6edf3match_infoTff7b72=Tb4b4b4{Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Te6edf3destTb4b4b4}Tb4b4b4,
Te6edf3queryTff7b72=Tb4b4b4{Ta5d6ff"Ta5d6fftimeoutTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff1Ta5d6ff"Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tff7b72with Tb4b4b4(
Te6edf3patchTb4b4b4(Ta5d6ff"Ta5d6ffmeshchatx.meshchat.reticulum_pathfinding.prepare_fresh_path_requestTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3patchTb4b4b4(
Ta5d6ff"Ta5d6ffmeshchatx.meshchat.reticulum_pathfinding.path_metadata_for_apiTa5d6ff"Tb4b4b4,
Te6edf3return_valueTff7b72=Tb4b4b4{Ta5d6ff"Ta5d6ffpath_staleTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4, Ta5d6ff"Ta5d6ffpath_unresponsiveTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4}Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3patchTb4b4b4(Ta5d6ff"Ta5d6ffmeshchatx.meshchat.RNS.Transport.has_pathTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4,
Te6edf3patchTb4b4b4(Ta5d6ff"Ta5d6ffmeshchatx.meshchat.RNS.Transport.hops_toTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=T79c0ff2Tb4b4b4)Tb4b4b4,
Te6edf3patchTb4b4b4(Ta5d6ff"Ta5d6ffmeshchatx.meshchat.AsyncUtils.run_asyncTa5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4:
Te6edf3response Tff7b72= Tff7b72await Te6edf3handlerTb4b4b4(Te6edf3reqTb4b4b4)
Tff7b72assert Te6edf3responseTff7b72.Td2a8ffstatus Tff7b72== T79c0ff200
Te6edf3mock_appTff7b72.Td2a8ffresend_failed_messages_for_destinationTff7b72.Td2a8ffassert_called_onceTb4b4b4(Tb4b4b4)
Te6edf3kwargs Tff7b72= Te6edf3mock_appTff7b72.Td2a8ffresend_failed_messages_for_destinationTff7b72.Td2a8ffcall_argsTff7b72.Td2a8ffkwargs
Tff7b72assert Te6edf3kwargsTb4b4b4[Ta5d6ff"Ta5d6ffcontextTa5d6ff"Tb4b4b4] Tff7b72is Te6edf3current
Tff7b72assert Te6edf3kwargsTb4b4b4[Ta5d6ff"Ta5d6ffcontextTa5d6ff"Tb4b4b4] Tff7b72is Tff7b72not Te6edf3other
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tff7b72async Tff7b72def Td2a8fftest_ping_resend_uses_current_context_onlyTb4b4b4(Te6edf3mock_appTb4b4b4)Tb4b4b4:
Tff7b72import T7ee787RNS
Te6edf3currentTb4b4b4, Te6edf3other Tff7b72= Te6edf3_two_running_contextsTb4b4b4(Te6edf3mock_appTb4b4b4)
Te6edf3mock_appTff7b72.Td2a8ffreticulum Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3mock_appTff7b72.Td2a8ffrecall_identity Tff7b72= Te6edf3MagicMockTb4b4b4(Te6edf3return_valueTff7b72=Te6edf3MagicMockTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3handler Tff7b72= Te6edf3_find_handlerTb4b4b4(
Te6edf3mock_appTb4b4b4,
Ta5d6ff"Ta5d6ff/api/v1/ping/Tffd700{destination_hash}Ta5d6ff/lxmf.deliveryTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffPOSTTa5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3dest Tff7b72= Ta5d6ff"Ta5d6ffabTa5d6ff" Tff7b72* T79c0ff16
Te6edf3receipt Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3receiptTff7b72.Td2a8ffstatus Tff7b72= Te6edf3RNSTff7b72.Td2a8ffPacketReceiptTff7b72.Td2a8ffDELIVERED
Te6edf3receiptTff7b72.Td2a8ffproof_packetTff7b72.Td2a8ffhops Tff7b72= T79c0ff1
Te6edf3receiptTff7b72.Td2a8ffproof_packetTff7b72.Td2a8ffrssi Tff7b72= Tff7b72-T79c0ff50
Te6edf3receiptTff7b72.Td2a8ffproof_packetTff7b72.Td2a8ffsnr Tff7b72= T79c0ff5
Te6edf3receiptTff7b72.Td2a8ffproof_packetTff7b72.Td2a8ffq Tff7b72= T79c0ff100
Te6edf3receiptTff7b72.Td2a8ffproof_packetTff7b72.Td2a8ffreceiving_interface Tff7b72= Ta5d6ff"Ta5d6ffUDPTa5d6ff"
Te6edf3receiptTff7b72.Td2a8ffproof_packetTff7b72.Td2a8ffpacket_hash Tff7b72= Ta5d6ffbTa5d6ff"Tffea00\x00Ta5d6ff" Tff7b72* T79c0ff16
Te6edf3receiptTff7b72.Td2a8ffget_rttTff7b72.Td2a8ffreturn_value Tff7b72= T79c0ff0.1
Te6edf3receiptTff7b72.Td2a8ffdestinationTff7b72.Td2a8ffhashTff7b72.Td2a8ffhexTff7b72.Td2a8ffreturn_value Tff7b72= Te6edf3dest
Te6edf3packet Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3packetTff7b72.Td2a8ffsendTff7b72.Td2a8ffreturn_value Tff7b72= Te6edf3receipt
Tff7b72with Tb4b4b4(
Te6edf3patchTb4b4b4(Ta5d6ff"Ta5d6ffmeshchatx.meshchat.RNS.Transport.has_pathTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4,
Te6edf3patchTb4b4b4(Ta5d6ff"Ta5d6ffmeshchatx.meshchat.RNS.Transport.hops_toTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=T79c0ff1Tb4b4b4)Tb4b4b4,
Te6edf3patchTb4b4b4(Ta5d6ff"Ta5d6ffmeshchatx.meshchat.RNS.DestinationTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3patchTb4b4b4(Ta5d6ff"Ta5d6ffmeshchatx.meshchat.RNS.PacketTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=Te6edf3packetTb4b4b4)Tb4b4b4,
Te6edf3patchTb4b4b4(Ta5d6ff"Ta5d6ffmeshchatx.meshchat.AsyncUtils.run_asyncTa5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4:
Te6edf3response Tff7b72= Tff7b72await Te6edf3handlerTb4b4b4(
Te6edf3_make_requestTb4b4b4(
Te6edf3match_infoTff7b72=Tb4b4b4{Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Te6edf3destTb4b4b4}Tb4b4b4,
Te6edf3queryTff7b72=Tb4b4b4{Ta5d6ff"Ta5d6fftimeoutTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff5Ta5d6ff"Tb4b4b4}Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3responseTff7b72.Td2a8ffstatus Tff7b72== T79c0ff200
Te6edf3mock_appTff7b72.Td2a8ffresend_failed_messages_for_destinationTff7b72.Td2a8ffassert_called_onceTb4b4b4(Tb4b4b4)
Te6edf3kwargs Tff7b72= Te6edf3mock_appTff7b72.Td2a8ffresend_failed_messages_for_destinationTff7b72.Td2a8ffcall_argsTff7b72.Td2a8ffkwargs
Tff7b72assert Te6edf3kwargsTb4b4b4[Ta5d6ff"Ta5d6ffcontextTa5d6ff"Tb4b4b4] Tff7b72is Te6edf3current
Tff7b72assert Te6edf3kwargsTb4b4b4[Ta5d6ff"Ta5d6ffcontextTa5d6ff"Tb4b4b4] Tff7b72is Tff7b72not Te6edf3other
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────